20221103培训
用的(demo1)
缓存
redis 与一般数据库区别
redis 是一个非关系型数据库,是一个内存型的数据库,数据放在内存里面,服务器重启就没有了,运行很快,通常把这种数据库称为缓存;postgres 是关系型数据库,是硬盘型数据库。
声明式与编程式缓存
声明式缓存,安全性差,在接口前面用装饰器声明缓存
编程式缓存,效果好,在接口内部选择哪里写入缓存哪里清楚缓存
缓存使用方法
旁路缓存模式:先更新数据库、再删除缓存。也就是只有查找的时候生成缓存。这种方法如果并发过多,仍然不可靠。
读写穿透模式:先更新缓存,由缓存更新数据库。太贵了,用的少。
异步写入模式:先更新缓存,通过异步方式更新数据库,适用于对一致性要求不高,对并发量要求高的。
使用方法
1.安装包
pip install django-redis==4.10.0
2.设置 setting
CACHES = {
"default":{
"BACKEND":"django_redis.cache.RedisCache",
"LOCATION":"redis://:@localhost:6379/0",#最后的反斜杠 0 代表第几个数据库,redis 默认有 16 个数据库
"OPTIONS":{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://:@localhost:6379/1", # 最后的反斜杠 0 代表第几个数据库,redis 默认有 16 个数据库
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
3.把建立缓存和删除缓存写进代码中
django 关联数据库相关
什么是关联数据库
通过外键进行关联。注意查询时的 1+n 问题,1 条查询指令导致数据库进行了 n 次查询
操作流程
1.models 中新建数据库
user = models.ForeignKey(Users, related_name='user_articles', on_delete=models.CASCADE)
#外键,把 user 这一列和另外一张表连接,一般为一对多,foreighkey 在那个表,哪个表就是多。ondelete 表示如果原表被删除了,这个有外键的表怎么办,cascade 叫级联删除直接删除此表中的所有数据,set_null 表示设置为空,SET_DEFAULT() 表示设置为一个默认值。
2.迁移数据库
Python manage.py makemigrations
Python lmanage.py migrate
3.写入几个数据
在 admin 中注册这个新数据库,之后在 admin 中添加几个数据
4.新建接口输入 userid,查询 user 的文章
这个接口要注意查询方式,
user = Users.objects.filter(pk=user_id).first()
if not user.exists():
return Response({"code":"404","message":"user not exist"})
articles = Article.objects.filter(user=user)
# articles = user.user_articles.all()#反查,可以从 user 表查到 article
# articles = Article.objects.filter(user__id=user_id)#filter 里面也可以这样写 user__in=user_id,这时候前面的三行就不需要了,但是容易被注入
5.新建接口是查询所有文章
这个接口要注意 1+n 问题,
# articles = Article.objects.all()#出现 1+n 查询
articles = Article.objects.all().prefetch_related('user').only('title','user')#解决 1+n 问题
6.urls 中注册这两个接口
使用 BIgCommerce 的 API
用下面的网站查看 api 的用法 Catalog Overview | BigCommerce Dev Center
使用下面的网站查看 api 的调用 Create Customers | BigCommerce Dev Center
使用流程
1.写接口
2.urls 注册
数据库设计工具
mysql workbench、processon
powerdesigner